// Function.prototype._call = function(context){
//   //判断传入是否为null, 如果为null, 就指向window
//   var context = context || window;
//   //获取调用call的函数，用this获取
//   context.fn = this;
//   console.log('context', context)
//   var args = [];
//   //数值不确定，直接用for循环 arguments 类数组对象
//   for(var i = 1, len = arguments.length; i< len; i++){
//     args.push('arguments['+i+']');
//   }
//   //最后得到args是[argument[1], argument[2],...]
//   //使用eval执行函数
//   //从第二个参数到最后一个参数作为fn的参数
//   var res = eval('context.fn(' + args + ')');
//   //最后删除这个函数fn，因为他是新增在obj属性中，不是我们想要的，所以需要删除
//   delete context.fn;
//   return res;
// }
//
// //测试
// var result = 2;
// var obj = {value: 11};
// function bar(name, age){
//   console.log(this.value);
//   return{
//     value: this.value,
//     name: name,
//     age: age
//   }
// };
//
// bar._call(null);
// // bar._call(obj, 'yigeyi', 18);
let callN = {
  name: '7898'
}
function Fn(name, age){
  console.log('fn', this.name);
  // return {
  //   name: this.name
  // }
}
//
//
// Fn.call(callN);


Function.prototype.myBind = function(context) {
  if (typeof this !== 'function') {
    throw new TypeError('Error');
  }
  console.log('this', this,context)
  const _this = this;
  const argus = [...arguments].slice(1);
  console.log('argus', ...argus, ...arguments)
  return function F() {
    console.log(111111, this instanceof F)
    //因为返回了一个函数，可以new F(),所以需要判断
    // console.log('this instanceof F', this instanceof F)
    if (this instanceof F) {
      console.log('...argus, ...arguments', ...argus, ...arguments)
      return new _this(...argus, ...arguments);
    }
    return _this.apply(context, argus.concat(...arguments));
  }
}
Fn.myBind(callN, 18,23)();


let promise1 = new Promise((r,j)=>{
    setTimeout(()=>{
      r('成功');
    }, 1200)
})
//调用方法
promise1.then(res=>{
  console.log('getData' + res)
});

let promise2 = promise1.then(res=>{
  return 'promise2'
});

promise2.then(res=>{
  console.log(res)
})
// getInfo().then(res=>{
//   console.log(res)
// })

